﻿using System;
using GestorDeFlotasDesktop.Listados;
using System.Windows.Forms;
using Controllers;
namespace GestorDeFlotasDesktop
{
    public partial class AbmChofer : Form
    {

        #region Inicializador

        public AbmChofer()
        {
            InitializeComponent();
        }

        #endregion

        #region Propiedades

        public lstChoferes parentForm { get; set; }
        public Chofer chofer { get; set; }
        public Operacion operacion { get; set; }
        private bool valido = true;

        #endregion

        #region Eventos

        private void AbmChofer_Load(object sender, EventArgs e)
        {
            if (operacion == Operacion.Alta)
            {
                chkHabilitado.Checked = true;
                lblOperacion.Text = "Nuevo";
            }
            else
            {
                CargarForm();
                if (operacion == Operacion.Baja)
                {
                    InhabilitarForm();
                    lblOperacion.Text = "Eliminar";
                    btnLimpiar.Enabled = false;
                }
                else
                {
                    lblOperacion.Text = "Modificar";
                }
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {

            if (operacion == Operacion.Baja)
            {
                ChoferController.Eliminar(chofer.Chofer_Id);
                MessageBox.Show("El chofer fue eliminado con éxito");
                if (parentForm != null) parentForm.ActualizarGrilla();
                Close();
            }
            else
            {

                ValidarForm(sender, e);
                if (valido)
                {
                    if (operacion == Operacion.Alta)
                    {
                        chofer = CargarObjeto();
                        ChoferController.Agregar(chofer);
                        MessageBox.Show("El chofer fue dado de alta con éxito");
                    }
                    else if (operacion == Operacion.Modificacion)
                    {
                        chofer = CargarObjeto();
                        ChoferController.Modificar(chofer);
                        MessageBox.Show("El chofer fue modificado con éxito");
                    }

                    LimpiarForm();
                    chofer = null;
                    if (parentForm != null) parentForm.ActualizarGrilla();
                    Close();
                }
                valido = true;
            }



        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarForm();
        }

        #endregion

        #region Metodos del Form

        private Chofer CargarObjeto()
        {
            if (chofer == null) chofer = new Chofer();

            chofer.Chofer_Apellido = txtApellido.Text;
            chofer.Chofer_Direccion = txtDireccion.Text;
            chofer.Chofer_Mail = txtMail.Text;
            chofer.Chofer_Nombre = txtNombre.Text;
            chofer.Chofer_Fecha_Nac = dtpNacimiento.Value;
            chofer.Chofer_Habilitado = chkHabilitado.Checked;


            if (!string.IsNullOrEmpty(txtDni.Text))
                chofer.Chofer_Dni = Convert.ToDecimal(txtDni.Text);

            if (!string.IsNullOrEmpty(txtTelefono.Text))
                chofer.Chofer_Telefono = Convert.ToDecimal(txtTelefono.Text);

            return chofer;
        }

        private void CargarForm()
        {
            txtApellido.Text = chofer.Chofer_Apellido;
            txtDireccion.Text = chofer.Chofer_Direccion;
            txtDni.Text = chofer.Chofer_Dni.ToString();
            txtMail.Text = chofer.Chofer_Mail;
            txtNombre.Text = chofer.Chofer_Nombre;
            txtTelefono.Text = chofer.Chofer_Telefono.ToString();
            dtpNacimiento.Value = chofer.Chofer_Fecha_Nac;
            chkHabilitado.Checked = chofer.Chofer_Habilitado;
        }

        private void LimpiarForm()
        {
            txtApellido.Text = "";
            txtDireccion.Text = "";
            txtDni.Text = "";
            txtMail.Text = "";
            txtNombre.Text = "";
            txtTelefono.Text = "";
            dtpNacimiento.Value = DateTime.Today;
            chkHabilitado.Checked = true;
        }

        private void InhabilitarForm()
        {
            txtApellido.Enabled = false;
            txtDireccion.Enabled = false;
            txtDni.Enabled = false;
            txtMail.Enabled = false;
            txtNombre.Enabled = false;
            txtTelefono.Enabled = false;
            dtpNacimiento.Enabled = false;
            chkHabilitado.Enabled = false;
        }

        #endregion

        #region Validaciones


        private void ValidarForm(object sender, EventArgs e)
        {
            valido = true;
            txtNombre_Validated(sender, e);
            txtApellido_Validated(sender, e);
            txtDireccion_Validated(sender, e);
            dtpNacimiento_Validated(sender, e);
            txtDni_Validated(sender, e);
            txtTelefono_Validated(sender, e);
        }

        private void txtNombre_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                errProvider.SetError(txtNombre, "Debe ingresar el nombre");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtNombre, "");
            }
        }

        private void txtApellido_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                errProvider.SetError(txtApellido, "Debe ingresar el apellido");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtApellido, "");
            }
        }

        private void txtDireccion_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtDireccion.Text))
            {
                errProvider.SetError(txtDireccion, "Debe ingresar la dirección");
                valido = false;
            }
            else
            {
                errProvider.SetError(txtDireccion, "");
            }
        }

        private void dtpNacimiento_Validated(object sender, EventArgs e)
        {
            if (dtpNacimiento.Value > DateTime.Today)
            {
                errProvider.SetError(dtpNacimiento, "La fecha de nacimiento no puede ser mayor a la de hoy");
                valido = false;
            }
            else
            {
                errProvider.SetError(dtpNacimiento, "");
            }
        }

        private void txtDni_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtDni.Text))
            {
                errProvider.SetError(txtDni, "Debe ingresar el dni");
                valido = false;
            }
            else
            {
                if (!Utiles.EsDecimal(txtDni.Text))
                {
                    errProvider.SetError(txtDni, "Solo puede ingresar números");
                    valido = false;
                }
                else
                {
                    errProvider.SetError(txtDni, "");
                }

            }
        }

        private void txtTelefono_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtTelefono.Text))
            {
                errProvider.SetError(txtTelefono, "Debe ingresar el teléfono");
                valido = false;
            }
            else
            {
                if (!Utiles.EsDecimal(txtTelefono.Text))
                {
                    errProvider.SetError(txtTelefono, "Solo puede ingresar números");
                    valido = false;
                }
                else
                {
                    var choferId = chofer != null ? chofer.Chofer_Id : -1;
                    if (ChoferController.ExisteElTelefono(txtTelefono.Text, choferId))
                    {
                        errProvider.SetError(txtTelefono, "Ya existe un chofer con el mismo teléfono");
                        valido = false;
                    }
                    else
                    {
                        errProvider.SetError(txtTelefono, "");
                    }
                }
            }
        }


        #endregion

        private void txtNumeric_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar)
                && !char.IsDigit(e.KeyChar)
                )
            {
                e.Handled = true;
            }
        }



    }
}
